package 每日一题;

import java.util.ArrayList;
import java.util.HashMap;

/**
 * 593. 有效的正方形
 * 给定2D空间中四个点的坐标 p1, p2, p3 和 p4，如果这四个点构成一个正方形，则返回 true 。
 *
 * 点的坐标 pi 表示为 [xi, yi] 。输入 不是 按任何顺序给出的。
 *
 * 一个 有效的正方形 有四条等边和四个等角(90度角)。
 *
 *
 *
 * 示例 1:
 *
 * 输入: p1 = [0,0], p2 = [1,1], p3 = [1,0], p4 = [0,1]
 * 输出: True
 * 示例 2:
 *
 * 输入：p1 = [0,0], p2 = [1,1], p3 = [1,0], p4 = [0,12]
 * 输出：false
 * 示例 3:
 *
 * 输入：p1 = [1,0], p2 = [-1,0], p3 = [0,1], p4 = [0,-1]
 * 输出：true
 *
 *
 * 提示:
 *
 * p1.length == p2.length == p3.length == p4.length == 2
 * -104 <= xi, yi <= 104
 */
public class D220729_T0593 {
    //计算任意两个点的距离 四条边相等 < 对角线相等 且不能为零
    public boolean validSquare(int[] p1, int[] p2, int[] p3, int[] p4) {

        ArrayList<int[]> ints = new ArrayList<>();
        ints.add(p1);
        ints.add(p2);
        ints.add(p3);
        ints.add(p4);

        HashMap<Integer, Integer> map = new HashMap<>();

        for (int i = 0; i < ints.size(); i++) {
            for (int j = i + 1; j < ints.size(); j++) {
                int value = Math.abs(ints.get(i)[0] - ints.get(j)[0]) * Math.abs(ints.get(i)[0] - ints.get(j)[0]) + Math.abs(ints.get(i)[1] - ints.get(j)[1]) * Math.abs(ints.get(i)[1] - ints.get(j)[1]);
                map.put(value, map.getOrDefault(value, 0) + 1);
            }
        }

        //只有两个结果说明 只有两个长度， 不存在0说明 任意两个点不重合
        return map.size() == 2 && !map.containsKey(0);

    }
}
